import { http } from "@/utils/http";
import type { AjaxResult } from "./types";
import { baseUrlApi } from "./utils";

// 商品列表查询参数
interface QueryParams {
  pageNum: number; // 当前页码
  pageSize: number; // 每页显示条数
  productSn?: string; // 商品编码
  productName?: string; // 商品名称
  categoryId?: number; // 分类ID
  minPrice?: number; // 最低价格
  maxPrice?: number; // 最高价格
}

// 商品列表数据结构
interface ProductDTO {
  id: number; // 商品ID
  productSn: string; // 商品编码
  productName: string; // 商品名称
  categoryId: number; // 分类ID
  categoryName: string; // 分类名称
  productDescription: string; // 商品描述
  price: number; // 商品价格
  salesQuantity: number; // 商品销量
  stockQuantity: number; // 商品库存
  productUrl: string; // 商品图片URL
  createTime: Date; // 创建时间
  updateTime: Date; // 更新时间
}

// 商品表单数据结构
interface ProductForm {
  id?: number; // 商品ID（新增时可选）
  productSn?: string; // 商品编码（新增时由后端生成）
  productName: string; // 商品名称
  categoryId: number; // 分类ID
  categoryName?: string; // 分类名称
  categoryIds?: number[]; // 级联选择器的值
  productDescription: string; // 商品描述
  price: number; // 商品价格
  salesQuantity: number; // 商品销量
  stockQuantity: number; // 商品库存
  productUrl: string; // 商品图片URL
}

// 商品相关接口
export const listAllProduct = () => {
  return http.request<AjaxResult>("get", baseUrlApi("/product/listAll"));
};

export const listProductByPage = (params?: QueryParams) => {
  return http.request<AjaxResult>("get", baseUrlApi("/product/page"), {
    params
  });
};

export const addProduct = (data: ProductForm) => {
  return http.request<AjaxResult>("post", baseUrlApi("/product/add"), { data });
};

export const updateProduct = (data: ProductForm) => {
  return http.request<AjaxResult>("put", baseUrlApi("/product/update"), {
    data
  });
};

export const deleteProduct = (productSn: string) => {
  return http.request<AjaxResult>(
    "delete",
    `${baseUrlApi("/product/deleteBySn")}?productSn=${productSn}`
  );
};

export const deleteProductBatch = (productSns: string[]) => {
  return http.request<AjaxResult>(
    "delete",
    baseUrlApi("/product/deleteBySnBatch"),
    {
      data: productSns
    }
  );
};

export const getProductBySn = (productSn: string) => {
  return http.request<AjaxResult>(
    "get",
    baseUrlApi(`/product/getBySn/${productSn}`),
    {}
  );
};

export const getProductByPrice = (minPrice: number, maxPrice: number) => {
  return http.request<AjaxResult>("get", baseUrlApi("/product/selectByPrice"), {
    params: {
      minPrice,
      maxPrice
    }
  });
};

// 重新导出类型
export type { QueryParams, ProductDTO, ProductForm };
